#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
lcx:update
2024/01/25
'''
import os
from program.environ import RankAscending, FilterAfter

# ========1.基本配置========
'''网络代理'''
#proxy = 'socks5h://127.0.0.1:1080'  # shadowsocks开小飞机的用这个
proxy = 'http://127.0.0.1:7890'     # http代理用这个
# proxy = None                        # 肉身翻墙用这个
'''路径配置(非必要，勿动！！)'''
_ = os.path.abspath(os.path.dirname(__file__))  				# 返回当前文件路径
root_path = os.path.abspath(os.path.join(_, '..')) 			 	# 返回根目录文件夹
# ===创建目录
# 数据基本目录
pickle_path = os.path.join(root_path, 'data', 'pickle_data')
if not os.path.exists(pickle_path):
	os.makedirs(pickle_path)
# 因子目录
data_path = os.path.join(root_path, 'data', 'factors')
if not os.path.exists(data_path):
	os.makedirs(data_path)
# 回测结果目录
output_path = os.path.join(root_path, 'data/回测结果')
if not os.path.exists(output_path):
	os.makedirs(output_path)
# 交换缓存目录
swap_path = os.path.join(root_path, 'data/temp')
if not os.path.exists(swap_path):
	os.makedirs(swap_path)
# 资金费率目录
fundingrate_path = os.path.join(root_path, 'data', 'funding_rate')
# 是否启动资金费率计算
enable_funding_rate_r = True
# 基础数据列名
head_columns = [
	'candle_begin_time', 
	'symbol', 
	'open',
	'high',
	'low',
	'close',
	'avg_price',
	'下个周期_avg_price', 
	'volume',
	'funding_rate_r',   # 8小时1次，用于修正资金曲线
]  


# ========2.1.选股因子计算配置=========
# 是否并行计算选股因子
multi_cal_factors = False
# 是否并行计算选股因子参数
multi_cal_params = True
# 选股因子计算列表
factor_class_list = ['Bias']
factor_params_list  = [3, 4, 6, 8, 9, 12, 24, 30, 36, 48, 60, 72, 96] + list(range(80, 500, 10))

# ========2.2.过滤因子计算配置==========
filter_config_list = [
	{
		'filter': '涨跌幅max',
		'params_list': [4, 6, 8, 12, 24]
	},
	{
		'filter': 'Volume',
		'params_list': [3, 6, 12, 24, 36, 48, 72]
	},
]


# ========3. 参数遍历基本配置========
compound_name = '遍历'								# name  
factor_type = 'cross'								# cross表示横截面因子、vertical表示纵截面因子
# 遍历开始、结束时间
start_date = '2021-01-01'
end_date = '2024-01-01'

# 是否开启逐月/年评估
per_eva = 'year'                                    # month表示逐月评估，year表示逐年评估，None表示全时间段评估
del_mode = True                                     # 删除模式，每一次运行遍历删除上一次运行的结果

# 并行计算
multiprocess = True
n_cores = min(os.cpu_count() - 2,59)
NUMBA_AVAILABLE = True								# 是否开启Numba加速模式，遍历速度极大提升！！！

# ===选币因子===
# 遍历的因子列表
factor_name_list = ['Bias']								#需要过滤的因子写在里面
# 遍历因子顺序，True表示因子值大的是多投方向
factor_ascending = [True,False]
# 遍历差分参数
diff_param = [0]
# 因子权重
weigth = [1]

trade_type = 'swap'								# 市场类型，swap合约，spot现货
c_rate = 6 / 10000								# 手续费
hold_hour_num = 1								# 持仓时间
long_coin_num = 1								# 多币的个数
short_coin_num = 1								# 空币的个数
leverage = 1									# 杠杆率
long_black_list = ['LUNA-USDT','UNFI-USDT']		# 黑名单
short_black_list = ['LUNA-USDT','UNFI-USDT']	# 白名单
start_funding = 10000							# 初始资金


# == 过滤配置 每一组过滤是一个字典,这里和因子配置不同，因子配置是一个字典，过滤配置是一个列表里面放字典，每个字典里面是一个方向的过滤,需要过滤的遍历条件添加到列表里面
ergodic_filter_list = [
    {
        'df1':[
            {
                'name': ['涨跌幅max'],
                'params': [24],
                'type': ['value'],
                'op': ['lte'],
                'value':[0.2],
                'rank_asc': [RankAscending.FALSE],
                'filter_after': [FilterAfter.FALSE]
            },
            {
                'name': ['Volume'],
                'params': [24],
                'type': ['rank'],
                'op': ['lte'],
                'value': [60],
                'rank_asc': [RankAscending.FALSE],
                'filter_after': [FilterAfter.FALSE]
            },

        ],
        'df2':[
            {
                'name': ['涨跌幅max'],
                'params': [24],
                'type': ['value'],
                'op': ['lte'],
                'value':[0.2],
                'rank_asc': [RankAscending.FALSE],
                'filter_after': [FilterAfter.FALSE]
            },
            {
                'name': ['Volume'],
                'params': [24],
                'type': ['rank'],
                'op': ['lte'],
                'value': [60],
                'rank_asc': [RankAscending.FALSE],
                'filter_after': [FilterAfter.FALSE]
            },
        ]
    },
]

